<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>数组去重</title>
    <script>
        //方式一
        Array.prototype.unique1=function(){
            let arr1=[];//先定义一个临时空数组
            for(let i=0;i<this.length;i++){//循环遍历需要去重的数组
                if(arr1.indexOf(this[i])==-1){//this指的是调用该数组原型方法的数组
                    arr1.push(this[i]);//若在这临时空数组中找不到该值，则将他放入此空数组，达到去重的目的
                }
            }
            return arr1;
        }
        let num=[1,2,3,4,5,6,4,3,4,6,9,8];
        console.log(num.unique1());
        //方式二(此效率最高，利用对象属性不会重复的特性)
        Array.prototype.unique2=function(){
            let obj={};//定义一个空对象（hash表）
            let arr2=[];//定义一个临时空数组
            for(let i=0;i<this.length;i++){
                if(!obj[this[i]]){//判断obj对象中有无该属性，无则将其添加为属性
                    obj[this[i]]=true;
                    arr2.push(this[i]);//存入临时空数组
                }
            }
            return arr2;
        }
        console.log(num.unique2());
        //方式三
        Array.prototype.unique3=function(){
            let arr3=[this[0]];//将去重数组的第一项放入一临时数组中；
            for(let i=1;i<this.length;i++){
                if(this.indexOf(this[i])==i){//若该数组中索引i的值第一次出现的位置不等于i，则就是重复的
                    arr3.push(this[i]);
                }
            }
            return arr3;
        }
        console.log(num.unique3());
        //方式四
        console.log([...new Set(num)]);//将数组先转换为set集数据结构，利用set元素不能重复的特性，在解构set，重新转为数组
        //方法五
        
    </script>
</head>
<body>
    
</body>
</html>